/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUsername(str) {
  const valid_map = ['admin', 'editor'];
  return valid_map.indexOf(str.trim()) >= 0;
}

const validator = {
  /** 验证必填 */
  required(msg, trigger) {
    return {
      required: true,
      message: msg,
      trigger: trigger || 'blur'
    };
  },
  /** 手机号码验证 */
  checkPhone(value, message) {
    if (value && value !== '' && !/^1[0123456789]\d{9}$/.test(value)) {
      return new Error(message);
    }
  },
  // checkPwd: (value, message) => {
  //   // const validReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#&*_])[\da-zA-Z~!!@#&*_]{6,16}$/;
  //   const validReg = /^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{6,12}$/;
  //   if (value && value !== '' && !validReg.test(value)) {
  //     return new Error(message);
  //   }
  // },
  /** 香港奥座机号码验证 */
  checkHPhone: (value, message) => {
    // const validReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#&*_])[\da-zA-Z~!!@#&*_]{6,16}$/;
    // const validReg = /^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{6,12}$/;
    const validReg = /^[0-9-]{4,30}$/;
    if (value && value !== '' && !validReg.test(value)) {
      return new Error(message);
    }
  },
  /** 纯数字验证 */
  checkNumber(value, message) {
    if (value && value !== '' && !/^\d{0,}$/g.test(value)) {
      return new Error(message); // /^\d*\.{0,1}\d{0,1}$/;
    }
  },
  /** 纯数字验证，0-59 */
  checkSeconds(value, message) {
    if (value && value !== '' && !/^[1-5]?[0-9]$/.test(value)) {
      return new Error(message);
    }
  },
  /** 正整数验证，1-无穷 */
  checkPositiveNumber(value, message) {
    if (value && value !== '' && !/^[1-9]\d*$/.test(value)) {
      return new Error(message);
    }
  },
  /** 数字加小数点验证 */
  checkNumberPoint(value, message) {
    if (value && value !== '' && !/^\d*\.{0,1}\d{0,1}$/g.test(value)) {
      return new Error(message);
    }
  },
  /** 数字加小数点验证 */
  checkNumberPointForFourt(value, message) {
    if (value && value !== '' && !/^\d*\.{0,4}\d{0,4}$/g.test(value)) {
      return new Error(message);
    }
  },
  /** 邮箱验证 */
  checkMail(value, message) {
    if (value && value !== '' && !/^([a-zA-Z]|[0-9])(\w|-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(value)) {
      return new Error(message);
    }
  },
  /* 登录密码 密码由6-16位的数字、字母、特殊字符(!@#&*_)组成 */
  /* 登录密码 密码由6-12位的数字、字母组成 */
  checkPwd: (value, message) => {
    // const validReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#&*_])[\da-zA-Z~!!@#&*_]{6,16}$/;
    const validReg = /^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{6,12}$/;
    if (value && value !== '' && !validReg.test(value)) {
      return new Error(message);
    }
  },
  /* 验证身份证号码 */
  checkIdNumber: (value, message) => {
    const idNumber = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/;
    if (value && value !== '' && !idNumber.test(value)) {
      return new Error(message);
    }
  },
  /* 验证英文名称输入 */
  checkEnglishName: (value, message) => {
    const validReg = /^[A-Za-z\s.]+$/;
    if (value && value !== '' && !validReg.test(value)) {
      return new Error(message);
    }
  },
  /* 验证大项名称 */
  checkDisciplineName: (value, message) => {
    // 英文字母、数字或汉字，100字以内
    const validReg = /^[a-zA-Z\d\u4e00-\u9fa5]{0,100}$/;
    if (value && value !== '' && !validReg.test(value)) {
      return new Error(message);
    }
  },
  /* 验证大项code */
  checkDisciplineCode: (value, message) => {
    // 英文字母或数字，20字以内
    const validReg = /^[a-zA-Z\d]{0,20}$/;
    if (value && value !== '' && !validReg.test(value)) {
      return new Error(message);
    }
  },
  /* 验证通知标题code */
  checkTitleCode: (value, message) => {
    const validReg = /[#$@/\\{}[\] ]/gi;
    if (value && value !== '' && validReg.test(value)) {
      return new Error(message);
    }
  },
  /* 验证手机验证码是否正确 */
  // 未完成，等API调用
  checkVerifyCode: (value, message) => {
    if (value && value !== '1111') {
      return new Error(message);
    }
  },
  /* 日期范围的校验 */
  checkData: (value, message) => {
    if (!value || !value[0] || !value[1]) {
      return new Error(message);
    }
  },
  /* 树形控件的验证 */
  checkTree: (value, message) => {
    if (value.length <= 0) {
      return new Error(message);
    }
  },
  /* 数组的验证 */
  checkArray: (value, message) => {
    if (value.length <= 0) {
      return new Error(message);
    }
  },
  /* 数组里值是否为空的验证 */
  checkArrayOfNone: (value, message) => {
    for (let i = 0; i < value.length; i++) {
      const item = value[i];
      if (item === '') {
        return new Error(message);
      }
    }
  },
  /* 验证金钱 / 两位小数 */
  checkPrice: (value, message) => {
    const validReg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
    if (value && value !== '' && !validReg.test(value)) {
      return new Error(message);
    }
  },
  /* 验证数字、小数最多99位 */
  checkSum: (value, message) => {
    const validReg = /^\d*\.{0,1}\d{0,99}$/;
    if (value && value !== '' && !validReg.test(value)) {
      return new Error(message);
    }
  },
  /* 验证二级域名 */
  checkRoute: (value, message) => {
    const validReg = /^[a-zA-Z\d-]*$/;
    if (value && !validReg.test(value)) {
      return new Error(message);
    }
  },
  checkNameLen: (value, message) => {
    if (value && value.length > 50) {
      return new Error(message);
    }
  },
  checkNumberLen: (value, message) => {
    if (value && value.length > 9) {
      return new Error(message);
    }
  },
  /* 验证收货人姓名 */
  checkConsigneeName: (value, message) => {
    if (value && value.length > 10) {
      return new Error(message);
    }
  }
};
export default validator;
